﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Sql;
using System.Data.SqlClient;
using AccessProvider;
using ClassLib;

namespace Interface.Lop
{
    public partial class CacLopHoc : Form
    {
        int siSo = 0;
        AccessProvider.DataConnection dc = new AccessProvider.DataConnection();

        public CacLopHoc()
        
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void loadLop()
        {
            string sql = "select * from LOP";
            


            DataTable dt = dc.getData(sql);
            

            
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                DataRow row = dt.Rows[i];
                int stt = i + 1;
                int maLop = Convert.ToInt32(row["MaLop"]);
                string sqlsiSo = "select count (*) from HOCSINH hs, LOP l where l.MaLop = hs.MaLop and l.MaLop = " + maLop + "";
                siSo = dc.getNumberValue(sqlsiSo);
                string tenLop = row["TenLop"].ToString();
                string Khoi = row["Khoi"].ToString();
                
                int soLuongMax = Convert.ToInt32(row["SoLuongMax"]);


                ClassLib.Lop entity = new ClassLib.Lop(maLop, tenLop, Khoi, siSo, soLuongMax);

                ListViewItem item = new ListViewItem(stt.ToString());

                item.SubItems.Add(tenLop);
                item.SubItems.Add(Khoi);
                item.SubItems.Add(siSo.ToString());
                item.SubItems.Add(soLuongMax.ToString());
                item.Tag = entity;

                lvLop.Items.Add(item);
            }
        }

        private void CacLopHoc_Load(object sender, EventArgs e)
        {
            loadKhoi();
            loadLop();
           
        }

        private void lvLop_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            
            if (lvLop.SelectedItems.Count == 0) return;
            ListViewItem item = lvLop.SelectedItems[0];

            ClassLib.Lop entity = (ClassLib.Lop)item.Tag;
            lbMaLop.Text = entity.Malop.ToString();
            txtTenLop.Text= entity.Tenlop;
            cbKhoi.Text = entity.Khoi;
            lbSiSo.Text = entity.SiSo.ToString();
            txtsoluongMax.Text = entity.Soluongmax.ToString();


        }       

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (lbMaLop.Text.Length == 0)
            {
                MessageBox.Show("Chon 1 lop de xoa.", "Loi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            string deleteQuery = "delete from LOP where MaLop = " + lbMaLop.Text + "" ;

            AccessProvider.DataConnection dc = new AccessProvider.DataConnection();
            dc.ExecNonQuery(deleteQuery);


            int position = lvLop.SelectedIndices[0];
            lvLop.Items.RemoveAt(position);

            cleartextbox(txtTenLop, txtsoluongMax);
            lbMaLop.ResetText();
            lbSiSo.ResetText();

            if (lvLop.Items.Count == 0) return;

            if (position == lvLop.Items.Count)
            {
                int newposition = position - 1;
                lvLop.Items[newposition].Selected = true;

            }

            else lvLop.Items[position].Selected = true;
        }

        void cleartextbox(params TextBox[] txts)
        {
            foreach (TextBox txt in txts)
                txt.Clear();
        }

       

        private void lvLop_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (lvLop.SelectedItems.Count == 0) return;
            ListViewItem item = lvLop.SelectedItems[0];

            ClassLib.Lop entity = (ClassLib.Lop)item.Tag;
            lbMaLop.Text = entity.Malop.ToString();
            txtTenLop.Text = entity.Tenlop;
            cbKhoi.Text = entity.Khoi;
            lbSiSo.Text = entity.SiSo.ToString();
            txtsoluongMax.Text = entity.Soluongmax.ToString();


        }

        

        private void btnSua_Click(object sender, EventArgs e)
        {
            ListViewItem item1 = lvLop.SelectedItems[0];
            ClassLib.Lop entity2 = (ClassLib.Lop)item1.Tag;
            string curtenlop = entity2.Tenlop.ToString();


            string ntenLop = txtTenLop.Text;
            
            if (lbMaLop.Text.Length == 0)
            {
                MessageBox.Show("Chọn 1 lớp để chỉnh sửa !", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            if (txtTenLop.Text.Length < 4 || txtTenLop.Text.Length > 5)
            {
                MessageBox.Show("Độ dài tên lớp không phù hợp", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            if (txtTenLop.Text.Length == 0)
            {
                MessageBox.Show("Chưa nhập tên lớp.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            string str1 = ntenLop;
            string a = str1.Substring(0, 2);
            string b = str1.Substring(2, 1);
            string c = str1.Substring(3, 1);

            bool checktenlop1 = checkString(c);
            if (checktenlop1 == true)
            {
                MessageBox.Show("Phải đúng đinh dạng tên lơp (VD: 10A1)", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            if (txtTenLop.Text.Length > 4)
            {
                string d = str1.Substring(4, 1);
                bool checktenlop2 = checkString(d);
                if (checktenlop2 == true)
                {
                    MessageBox.Show("Phải đúng đinh dạng tên lơp (VD: 10A1)", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }
            }
            


           
            bool checktenlop = checkString(b);
            if (checktenlop != true)
            {
                MessageBox.Show("Phải đúng đinh dạng tên lơp (VD: 10A1)", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            string nKhoi = cbKhoi.Text;

            if (a != nKhoi)
            {
                MessageBox.Show("Tên lớp và khối không trùng nhau", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            string nTenLop = txtTenLop.Text;
            //int nSiSo = Convert.ToInt32(lbSiSo.Text);
            int nSoLuongMax = Convert.ToInt32(txtsoluongMax.Text);
            
            string sqlsiSo = "select count (*) from HOCSINH hs, LOP l where l.MaLop = hs.MaLop and l.MaLop = " + lbMaLop.Text + "";
            siSo = dc.getNumberValue(sqlsiSo);

            if (nSoLuongMax < siSo)
            {
                MessageBox.Show("Sỉ số phải nhỏ hơn số lượng tối đa của lớp", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }


            if (curtenlop == ntenLop)
            {
                string updateQuery =
                     "update LOP set TenLop='{0}', Khoi ='{1}', SoLuongMax={2} where TenLop = '{3}'";

                updateQuery = string.Format(updateQuery, nTenLop, nKhoi, nSoLuongMax, ntenLop);
                
               
                dc.ExecNonQuery(updateQuery);
                                      

            //cap nhat giao dien
                lvLop.SelectedItems[0].SubItems[1].Text = ntenLop;

            lvLop.SelectedItems[0].SubItems[2].Text = nKhoi;
            
            lvLop.SelectedItems[0].SubItems[4].Text = nSoLuongMax.ToString();



            // cap nhat tag
            if (lvLop.SelectedItems.Count == 0) return;
            ListViewItem item = lvLop.SelectedItems[0];

            ClassLib.Lop entity = (ClassLib.Lop)item.Tag;
            lbMaLop.Text = entity.Malop.ToString();
            txtTenLop.Text = entity.Tenlop;
            cbKhoi.Text = entity.Khoi;
            lbSiSo.Text = entity.SiSo.ToString();
            txtsoluongMax.Text = entity.Soluongmax.ToString();

            }
          

           

            


        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            
            

            string Khoi = cbKhoi.Text;
            string TenLop = txtTenLop.Text;

            if (txtTenLop.Text.Length == 0)
            {
                MessageBox.Show("Chưa nhập tên lớp.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            if (txtTenLop.Text.Length < 4 || txtTenLop.Text.Length > 5)
            {
                MessageBox.Show("Độ dài tên lớp không phù hợp", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            string str1 = TenLop;
            string a = str1.Substring(0, 2);
            string b = str1.Substring(2, 1);
            string c = str1.Substring(3, 1);

            if (txtTenLop.Text.Length > 4)
            {
                string d = str1.Substring(4, 1);
                bool checktenlop2 = checkString(d);
                if (checktenlop2 == true)
                {
                    MessageBox.Show("Phải đúng đinh dạng tên lơp (VD: 10A1)", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }
            }
            

            if (a != Khoi)
            {
                MessageBox.Show("Tên lớp và khối không trùng nhau", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }            

            bool checktenlop = checkString(b);
            if (checktenlop != true)
            {
                MessageBox.Show("Phải đúng đinh dạng tên lơp (VD: 10A1)", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;               
            }

            bool checktenlop1 = checkString(c);
            if (checktenlop1 == true)
            {
                MessageBox.Show("Phải đúng đinh dạng tên lơp (VD: 10A1)", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;               
            }
            
           



            
            if (txtsoluongMax.Text.Length == 0)
            {
                MessageBox.Show("Chưa nhập số lượng học sinh tối đa trong lớp.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            

            string _max = null;

            bool checkmax = checkString(txtsoluongMax.Text);
            if (checkmax == true)
            {
                MessageBox.Show("Số lượng phải là kí tự số", "Lổi", MessageBoxButtons.OK);
                return;

            }
            else
            {
                _max = txtsoluongMax.Text;
            }

            int SoLuongMax = Convert.ToInt32(txtsoluongMax.Text);

            

           

            // kiểm tra xem tên lớp có chưa
            string checkQuery = "select count(*) from LOP where TenLop = '" + TenLop + "'";
                       
            int soLuong = dc.getNumberValue(checkQuery);
            

            if (soLuong > 0)
            {
                MessageBox.Show("Lớp đã tồn tại.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            // thực hiện thêm vào dữ liệu
            string insertQuery = "insert into LOP values('" +TenLop + "','" + Khoi + "'," + SoLuongMax + ")";
            dc.ExecNonQuery(insertQuery);

            string identityQuery = "select max(MaLop) from LOP";

            int MaLop = dc.getNumberValue(identityQuery);
           
            

            // cập nhật lớp mới lên giao diện mà ko load lại
            ClassLib.Lop l = new ClassLib.Lop();
            l.Malop = MaLop;
            l.Tenlop = TenLop;
            l.Khoi = Khoi;
            l.SiSo = 0;
            l.Soluongmax = SoLuongMax;
            string sql = "Select count (*) from Lop";
            int stt = dc.getNumberValue(sql);

            ListViewItem item = new ListViewItem(stt.ToString());            
            l.Tenlop = TenLop;
            l.Khoi = Khoi;
            l.SiSo = 0;
            l.Soluongmax = SoLuongMax;
            
            item.SubItems.Add(l.Tenlop);
            item.SubItems.Add(l.Khoi);
            item.SubItems.Add(l.SiSo.ToString());
            item.SubItems.Add(l.Soluongmax.ToString());
            item.Tag = l;

            lvLop.Items.Add(item);
        }

        private void btnChiTiet_Click(object sender, EventArgs e)
        {
            Lop.DanhSachLop dsl = new Lop.DanhSachLop();
            dsl.Activate();
            dsl.Show();
        }

        private void btReset_Click(object sender, EventArgs e)
        {
            cleartextbox(txtTenLop, txtsoluongMax);
            lbMaLop.ResetText();
            lbSiSo.ResetText();
            
        }

        private void lbMaLop_TextChanged(object sender, EventArgs e)
        {

        }

        private bool checkString(string a)
        {
            int len = a.Length;
            char[] letters = new char[len];
            letters = a.ToCharArray();
            for (int z = 0; z < len; z++)
            {
                if (letters[z] >= 48 && letters[z] <= 57)
                    return false;
            }
            return true;
        }

        private void loadKhoi()
        {
            
                    
                    cbKhoi.Items.Add("10");
                    cbKhoi.Items.Add("11");
                    cbKhoi.Items.Add("12");

               
            }

        


        }

      

       

 

       

    }

